'''
1、导入numpy和pandas
2、加载数据文件（read_csv）
3、缩小数据范围（data.query）
4、剔除掉入住率比较低的样本
5、分割数据集（train_test_split）
6、对数据集进行标准化
7、KNeighborsClassifier训练模型
8、准确率
'''
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler

data = pd.read_csv('./train.csv')
# print(data) #[29118021 rows x 6 columns]
# 缩小数据范围，因为太大了。为了节约一部分时间
print("执行到data")
data = data.query('x>3 & x<3.25 & y>3 & y<3.25 ')
print("查询结束")
# 剔除入住率比较低的样本
# 找到入住次数比较小的palce_id
place_count = data.groupby("place_id").aggregate(np.count_nonzero)
print(place_count)
# 剔除入住次数小于3
rf = place_count[place_count["row_id"]>3].reset_index()
print(rf)

# 从原始数据提取出rf中palce_id对应的数据
data = data[data['place_id'].isin(rf['place_id'])]
print(data)

# 分割数据集
x = data.drop(["row_id","time","place_id"],axis=1)
# 目标值
y = data["place_id"]
x_train,x_test,y_train,y_test = train_test_split(x,y)

# 对训练集进行标准化
ss = StandardScaler()
x_train = ss.fit_transform(x_train)

# 对测试集标准化
#           只用transform就可以了
x_test = ss.transform(x_test)

# KNeighborsClassifier()训练模型
knn = KNeighborsClassifier(n_neighbors=5)
# 训练
knn.fit(x_train, y_train)

# 准确率
score = knn.score(x_test,y_test)
print(score)


